let obj = {
  name: "zhangsan",
  age: 12
}
//遍历键值对组成的数组
let arr = Object.entries(obj);
// console.log(arr);
let map = new Map(arr);
// console.log(map);
let age = map.get('age')
// console.log(age);

let entries = map.entries()

// map.set('尼玛币', '翘你哇')
// console.log(map.size);


// for (let key in obj) {
//   console.log(key);
// }

// Iterator 迭代器对象
// 是一种接口，为各种数据结构提供统一的访问机制，任何数据解构只要部署了Iterator接口，就可以完成遍历，依次处理每一个数据解构的成员


// set 唯一值的集合 ，它的每一个成员都是唯一的、
//  let set = new Set(可以传入可迭代对象) set.add()  set.delete()  set.has() set.size set.clear()

// map 键值对的集合
// let map = new Map(键值对二维数组)  map.set() map.get() map.delete() map.size

// map 和 对象的区别
// 1.map默认情况下是没有任何键的，但是对象是有默认的键的，如果使用不当可能会造成命名冲突
// 2.map的键可以是任意数据类型，对象的键只能是string或symbol
// 3.map的键是有序的，对象的键是无序的
// 4.map的键值对个数可以直接通过size获取，但是对象的键值对个数不能直接获取，需要手动计算
// 5.map是可迭代对象实现了迭代协议，可直接通过forof循环遍历，对象没有实现迭代协议没有迭代器，无法直接通过for of循环遍历


// 迭代器 Iterator的原理
// 创建一个指针对象，指向数据结构的开始位置
// 第一次调用指针对象的next方法，指针指向数据解构的第一个成员
// 第二次调用指针对象的next方法,指针指向数据解构的第二个成员
// 以此类推，不断调用指针对象的next方法，直到指针指向数据解构的结束位置